package 面试今典150;

public class 今典1合并两个有序数组 {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        /*
        思路：
        如果m = 0，数组1中没有数据，while循环不执行，执行步骤3
        如果n = 0，数组2为空，啥都不执行，直接返回
        否则：
        从后向前遍历两个升序数组，将较大的数放在数组1的后面，然后将较大数组的下标-1
        直到有一个数组的下标为-1，结束
         */
        //1,从后向前进行遍历
        int i = m - 1,j = n - 1;
        int index = m + n - 1;//num1的最后一个位置
        while (i >= 0 && j >= 0){
            if (nums1[i] > nums2[j]){//将
                nums1[index--] = nums1[i--];
            }else {
                nums1[index--] = nums2[j--];
            }
        }
        //3，到这里说明，有一个数组遍历完成
        if (i < 0){//
            for (int k = 0; k < j; k++) {
                nums1[k] = nums2[k];
            }
        }
    }
}
